<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh" xml:lang="zh" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>组件架构</title>
<meta name="uma.type" content="SupportingMaterial">
<meta name="uma.name" content="use_component_architectures">
<meta name="uma.presentationName" content="组件架构">
<meta name="element_type" content="other">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../../css/default.css" type="text/css">
<script src="./../../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../../';
					var imgPath = './../../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top"><a name="Top"></a>
<div id="page-guid" value="1.2991947604188333E-306"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">组件架构</td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../../rup/guidances/supportingmaterials/resources/pract_dgm32.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">因为组件架构基于独立的、可替换的模块组件，因此开发和使用组件架构的实践有助于管理复杂性并促进复原。</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Related Elements</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../../rup/disciplines/rup_analysis_design_discipline_29760231.html" guid="_ydt62NnmEdmO6L4XMImrsA">分析与设计</a>
</li>
<li>
<a href="./../../../rup/domains/analysis_and_design_BD3BBB1D.html" guid="_kjFBYN7HEdm8G6yT7-Wdqw">分析与设计</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><a id="Top" name="Top"></a> 
<p align="center">
    <img height="187" alt="组件架构图像" src="./../../../rup/guidances/supportingmaterials/resources/softarch.gif" width="312" />
</p>
<p class="picturetext">
    具有多个<a class="elementLinkWithUserText" href="./../../../rup/guidances/termdefinitions/layer_F3814B38.html" guid="_yMbWgNnmEdmO6L4XMImrsA">层</a>的<a class="elementLinkWithUserText" href="./../../../rup/guidances/termdefinitions/component-based_development_cbd_1E319741.html" guid="_yCcUGdnmEdmO6L4XMImrsA">基于组件</a>的<a class="elementLink" href="./../../../rup/guidances/termdefinitions/architecture_122F321F.html" guid="_x7SjMNnmEdmO6L4XMImrsA">架构（architecture）</a>
</p>
<h2>
    <a id="What are Component Architectures" name="What are Component Architectures">组件架构有什么意义</a>？
</h2>
<p>
    组件架构是一种基于可替换组件（如<a class="elementLinkWithType" href="./../../../rup/guidances/concepts/component_A2E2B3B1.html" guid="3.524150980437479E-305">Concept: 组件</a>中所述）的架构。因为组件架构基于独立的、可替换的模块组件，所以它们有助于控制复杂性并支持反复使用。
</p>
<h2>
    <a id="Architectural Emphasis" name="Architectural Emphasis">架构重点</a>
</h2>
<p>
    用例在整个生命周期内自始至终推动了 Neusoft Unified Process（NUP），但设计活动则围绕了系统<a class="elementLink" href="./../../../rup/guidances/termdefinitions/architecture_122F321F.html" guid="_x7SjMNnmEdmO6L4XMImrsA">架构（architecture）</a>（对于软件密集型系统，是软件架构）的概念。 流程早期迭代（多数在精化阶段）主要关注的是生成和验证<a class="elementLink" href="./../../../rup/guidances/termdefinitions/software_architecture_2B63D9D.html" guid="_yV0jFdnmEdmO6L4XMImrsA">软件架构（software architecture）</a><i>，</i>它在初始开发周期采用可执行架构原型的形式，该架构原型在以后的迭代中逐渐演化为最终的系统。
</p>
<p>
    通过可执行架构，我们打算部分实现为了演示所选系统功能和属性（尤其是满足非功能需求的）而构造的系统。可执行架构用于降低与性能、吞吐量、容量、可靠性和其他“能力”相关的风险，这样就可以可靠地在<a class="elementLinkWithUserText" href="./../../../rup/guidances/termdefinitions/construction_2AA70F9.html" guid="_yEPD3dnmEdmO6L4XMImrsA">构造阶段</a>添加系统的完整功能，而无损坏之虞。
</p>
<p>
    关于架构（具体地说，是软件架构）概念的简介以及该概念为何至关重要的说明，请参阅<a class="elementLinkWithType" href="./../../../rup/guidances/concepts/software_architecture_4269A354.html" guid="3.066252221588648E-305">Concept: 软件架构</a>。
</p>
<p>
    NUP 提供了一种讲究方法的、系统的方式来设计、开发和验证架构。我们为围绕多架构视图概念的架构描述，以及为捕获架构风格、设计规则和约束提供了模板。<a class="elementLinkWithUserText" href="./../../../rup/capabilitypatterns/analysis_design_49725AC4.html" guid="{002674F9-6511-4D15-8623-B761D8C48986}">分析与设计</a>规程包含旨在确定架构约束和重要架构元素的具体活动，以及关于如何选择架构的指导信息。管理流程显示了在计划早期迭代时如何考虑到架构的设计以及解决主要技术风险。关于进一步信息，请参阅<a class="elementLink" href="./../../../rup/capabilitypatterns/project_management_FC6669AF.html" guid="{EA0C1D32-E39A-4D96-B956-E178DB776A96}">项目管理</a>规程以及与<a class="elementLinkWithType" href="./../../../rup/roles/rup_software_architect_DB0BF177.html" guid="{4AC346F0-E6FC-4D2C-8410-2EDF8DDDC91D}">Role: 软件架构师</a>相关联的所有活动。
</p>
<p>
    架构的重要性在于几个原因：
</p>
<ul>
    <li>
        它使您可以获得并保留对项目的灵巧控制，控制其复杂性并维护系统完整性。
    </li>
</ul>
<blockquote>
    <p>
        复杂的系统不仅仅是其组成部分的简单相加；也不仅仅是一连串小的独立战术决策。它必须采用某种统一、一致的结构来系统地组织这些组成部分，并且它必须提供关于如何发展系统的精确规则，而不会使其复杂性“膨胀”到超出人类的理解。
    </p>
    <p>
        架构通过建立一组公共引用和一个用以讨论设计问题的公共词汇表，确立了在整个项目范围内改进沟通和理解的方式。
    </p>
</blockquote>
<ul>
    <li>
        它是大规模重用的有效基础。
    </li>
</ul>
<blockquote>
    <p>
        通过阐明主要组件和它们之间的关键接口，架构使您可以实现重用，包括内部重用（确定公共部分）和外部重用（合并完备的开包即用组件）。但是，它也允许进行更大规模的重用：在着重于共同领域中不同功能的产品线环境中重用架构本身。
    </p>
</blockquote>
<ul>
    <li>
        它为项目管理提供了基础。
    </li>
</ul>
<blockquote>
    <p>
        计划和人员配备是根据主要组件来组织的。 基础结构决策由一个小而团结的架构团队采纳；不公布这些决策。开发分给几个小团队来执行，每个团队都负责系统的一部分或几部分。
    </p>
</blockquote>
<h2>
    <a id="Component-Based Development (CBD)" name="Component-Based Development (CBD)">基于组件的开发</a>
</h2>
<p>
    基于组件的开发是常规应用程序开发的变体，其中：
</p>
<blockquote>
    <ul>
        <li>
            应用程序是<b>分散的可执行组件构建而成</b>，这些组件可能由不同的团队<b>相互之间相对独立地开发的</b>。在 NUP 中它们称为“组合组件”。关于更详细的定义，请参阅<a class="elementLinkWithType" href="./../../../rup/guidances/concepts/component_A2E2B3B1.html" guid="3.524150980437479E-305">Concept: 组件</a>。
        </li>
        <li>
            应用程序可通过只升级构成应用程序的某些组合组件来进行<b>较小幅度地升级</b>。
        </li>
        <li>
            组合组件可由多个应用程序共享，为<b>复用</b>创造机会，但也产生了<b>项目之间的依赖关系</b>。
        </li>
        <li>
            虽然与“基于组件”关系不大，但基于组件的应用程序往往是<b>分布式的</b>。
        </li>
    </ul>
</blockquote>
<p>
    组合组件的生成有以下原因：
</p>
<ul>
    <li>
        在定义非常模块化的架构时，您确定、分离、设计、开发和测试结构良好的组件。这些组件可以分别测试和逐渐集成，以构成整个系统。
    </li>
    <li>
        而且，可以将其中一些组件开发为可重用的组件，尤其是那些对大范围的公共问题提供公共解决方案的组件。这些可重用的组件（可能不仅仅是实用程序或类库的集合）形成了在组织内重用的基础，提高了整体软件生产率和质量。
    </li>
    <li>
        最近，一些商业运作成功的组件基础结构（例如 CORBA、Internet、ActiveX、JavaBeans、.NET 和 J2EE）的出现触发了一整个针对各领域的开包即用组件的行业，使您可以购买和集成组件，而不是全部自行开发。
    </li>
</ul>
<p>
    上述列表的第一点采用了旧的模块化和封装概念，使这些面向对象技术的底层概念前进了一步。该列表中的最后两点将软件开发从一次编程一行转换到通过组合组件来组成软件。
</p>
<p>
    <a key="基于组件的开发（component-based development，CBD）" text="作为 Unified Process 中的功能" name="XE_component-based_development_(CBD)__as_a_feature_in_the_Unified_Process" id="XE_component-based_development_(CBD)__as_a_feature_in_the_Unified_Process" class="index"></a>NUP 以这些方式支持基于组件的开发：
</p>
<ul>
    <li>
        迭代法允许您循序渐进地确定组件，并决定开发哪些组件、重用哪些组件以及购买哪些组件。
    </li>
    <li>
        关注软件组件，使您可以清楚地阐述结构（组件以及它们的集成方式），包括它们交互的基础机制和模式。这反过来支持项目管理的计划方面，因为组件相关性可以帮助确定哪些组件可以同时开发，以及哪些要按顺序开发。<br />
    </li>
    <li>
        在分析与设计期间使用诸如包、子系统和层之类的概念，以组织组件和指定接口。
    </li>
    <li>
        先对组件组织测试，然后逐渐对较大组的集成组件组织测试。
    </li>
</ul>
<p>
    关于组件的更多信息，请参阅<a class="elementLinkWithType" href="./../../../rup/guidances/concepts/component_A2E2B3B1.html" guid="3.524150980437479E-305">Concept: 组件</a>。
</p><br />
<br /></td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright">Copyright &copy; 2008 版权所有 东软集团股份有限公司&nbsp; 联系邮箱:<a href="mailto:tcoe@neusoft.com">tcoe@neusoft.com</a></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
